home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / v cisle / autoit / autoit-v3.2.0.1-setup.exe / Include / GuiTreeView.au3 < prev    next >
Text File  |  2006-08-05  |  35KB  |  838 lines

  1. ; Include Version:1.66a (04 August 2006)
  2. #include-once
  3. #include <TreeViewConstants.au3>
  4. #include <GUIConstantsEx.au3>
  5. ; ------------------------------------------------------------------------------
  6. ;
  7. ; AutoIt Version: 3.1.1++
  8. ; Language:       English
  9. ; Description:    Functions that assist with TreeView.
  10. ;
  11. ; ------------------------------------------------------------------------------
  12.  
  13.  
  14.  
  15. ; Default treeview item extended structure
  16. ; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/treeview/structures/tvitemex.asp
  17. ; Min.OS: 2K, NT4 with IE 4.0, 98, 95 with IE 4.0
  18. Global Const $s_TVITEMEX            = "uint;uint;uint;uint;ptr;int;int;int;int;uint;int"
  19.  
  20. ; function list
  21. ;===============================================================================
  22. ; _GUICtrlTreeViewDeleteAllItems
  23. ; _GUICtrlTreeViewDeleteItem
  24. ; _GUICtrlTreeViewExpand
  25. ; _GUICtrlTreeViewGetBkColor
  26. ; _GUICtrlTreeViewGetCount
  27. ; _GUICtrlTreeViewGetIndent
  28. ; _GUICtrlTreeViewGetLineColor
  29. ; _GUICtrlTreeViewGetParentHandle
  30. ; _GUICtrlTreeViewGetParentID
  31. ; _GUICtrlTreeViewGetState
  32. ; _GUICtrlTreeViewGetText
  33. ; _GUICtrlTreeViewGetTextColor
  34. ; _GUICtrlTreeViewGetTree
  35. ; _GUICtrlTreeViewInsertItem
  36. ; _GUICtrlTreeViewSelectItem
  37. ; _GUICtrlTreeViewSetBkColor
  38. ; _GUICtrlTreeViewSetIcon
  39. ; _GUICtrlTreeViewSetIndent
  40. ; _GUICtrlTreeViewSetLineColor
  41. ; _GUICtrlTreeViewSetState
  42. ; _GUICtrlTreeViewSetText
  43. ; _GUICtrlTreeViewSetTextColor
  44. ; _GUICtrlTreeViewSort
  45. ;===============================================================================
  46.  
  47.  
  48. ;===============================================================================
  49. ;
  50. ; Description:            _GUICtrlTreeViewDeleteAllItems
  51. ; Parameter(s):        $i_treeview - controlID
  52. ; Requirement:            None
  53. ; Return Value(s):    Returns TRUE if successfull or FALSE otherwise.
  54. ; User CallTip:        _GUICtrlTreeViewDeleteAllItems($i_treeview) Removes all items from a tree-view control. (required: <GuiTreeView.au3>)
  55. ; Author(s):            Gary Frost (custompcs at charter dot net)
  56. ; Note(s):            
  57. ;
  58. ;===============================================================================
  59. Func _GUICtrlTreeViewDeleteAllItems($i_treeview)
  60.     Return GUICtrlSendMsg($i_treeview, $TVM_DELETEITEM, 0, $TVI_ROOT)
  61. EndFunc   ;==>_GUICtrlTreeViewDeleteAllItems
  62.  
  63.  
  64. ;===============================================================================
  65. ;
  66. ; Description:            _GUICtrlTreeViewDeleteItem
  67. ; Parameter(s):        $h_wnd - GUI ID
  68. ;                    $i_treeview - controlID
  69. ;                    $h_item - Optional: item ID/handle
  70. ; Requirement:            None
  71. ; Return Value(s):    Returns TRUE if successfull or FALSE otherwise.
  72. ; User CallTip:        _GUICtrlTreeViewDeleteItem($h_wnd, $i_treeview[, $h_item = 0]) Removes an item and all its children from a tree-view control. (required: <GuiTreeView.au3>)
  73. ; Author(s):            Gary Frost (custompcs at charter dot net)
  74. ; Note(s):            Rewritten by Holger Kotsch
  75. ;
  76. ;===============================================================================
  77. Func _GUICtrlTreeViewDeleteItem($h_wnd, $i_treeview, $h_item = 0)
  78.     Local $ret, $h_item_tmp
  79.     
  80.     If $h_item = 0 Then
  81.         $h_item = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
  82.         Else
  83.         $h_item_tmp = GUICtrlGetHandle($h_item)
  84.         If $h_item_tmp <> 0 Then
  85.         GUISetState(@SW_LOCK, $h_wnd)
  86.             $ret = GUICtrlDelete($h_item)
  87.         GUISetState(@SW_UNLOCK, $h_wnd)
  88.         Return $ret
  89.     EndIf
  90.     EndIf
  91.     
  92.     If $h_item > 0 Then
  93.         Return GUICtrlSendMsg($i_treeview, $TVM_DELETEITEM, 0, $h_item)
  94.     Else
  95.         Return 0
  96.     EndIf
  97. EndFunc   ;==>_GUICtrlTreeViewDeleteItem
  98.  
  99. ;===============================================================================
  100. ;
  101. ; Description:            _GUICtrlTreeViewExpand
  102. ; Parameter(s):        $i_treeview    - controlID
  103. ;                    $i_expand    - Optional: 0 = collapse items / 1 = expand items (default)
  104. ;                    $h_item        - Optional: item ID or item handle (default 0)
  105. ; Requirement:            None
  106. ; Return Value(s):    None
  107. ; User CallTip:        _GUICtrlTreeViewExpand($i_treeview[, $i_expand = 1[, $h_item = 0]]) Expands or collapses the list of child items associated with the specified parent item, if any. (required: <GuiTreeView.au3>)
  108. ; Author(s):        Holger Kotsch
  109. ; Note(s):            Completely rewritten (old routine by Gary Frost)
  110. ;
  111. ;===============================================================================
  112. Func _GUICtrlTreeViewExpand($i_treeview, $b_Expand = 1, $h_item = 0)
  113.     Local $h_item_tmp
  114.     
  115.     If $h_item = 0 Then
  116.         $h_item = $TVI_ROOT
  117.         Else
  118.         $h_item_tmp = GUICtrlGetHandle($h_item)
  119.         If $h_item_tmp <> 0 Then $h_item = $h_item_tmp
  120.         EndIf
  121.     
  122.     If $b_Expand Then
  123.         _TreeViewExpandTree($i_treeview, $TVE_EXPAND, $h_item)
  124.             Else
  125.         _TreeViewExpandTree($i_treeview, $TVE_COLLAPSE, $h_item)
  126.     EndIf
  127. EndFunc   ;==>_GUICtrlTreeViewExpand
  128.  
  129. ; Callback function for _GUICtrlTreeViewExpand()
  130. Func _TreeViewExpandTree($i_treeview, $i_expand, $h_item)
  131.     Local $h_child
  132.     
  133.     GUICtrlSendMsg($i_treeview, $TVM_EXPAND, $i_expand, $h_item)
  134.     
  135.     If $i_expand = $TVE_EXPAND And $h_item > 0 Then GUICtrlSendMsg($i_treeview, $TVM_ENSUREVISIBLE, 0, $h_item)
  136.     
  137.     $h_item = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CHILD, $h_item)
  138.     
  139.     While $h_item > 0
  140.         $h_child = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CHILD, $h_item)
  141.         If $h_child > 0 Then _TreeViewExpandTree($i_treeview, $i_expand, $h_item)    
  142.         $h_item = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_NEXT, $h_item)
  143.     WEnd
  144. EndFunc   ;==>_TreeViewExpandTree
  145.  
  146. ;===============================================================================
  147. ;
  148. ; Description:            _GUICtrlTreeViewGetBkColor
  149. ; Parameter(s):        $i_treeview - controlID
  150. ; Requirement:            None
  151. ; Return Value(s):    Returns Hex RGB Back Color of TreeView
  152. ; User CallTip:        _GUICtrlTreeViewGetBkColor($i_treeview) Gets the text back color of a Tree-View control (required: <GuiTreeView.au3>)
  153. ; Author(s):            Gary Frost (custompcs at charter dot net)
  154. ; Note(s):            
  155. ;
  156. ;===============================================================================
  157. Func _GUICtrlTreeViewGetBkColor($i_treeview)
  158.     Local $tc = Hex(String(GUICtrlSendMsg($i_treeview, $TVM_GETBKCOLOR, 0, 0)), 6)
  159.     Return '0x' & StringMid($tc, 5, 2) & StringMid($tc, 3, 2) & StringMid($tc, 1, 2)
  160. EndFunc   ;==>_GUICtrlTreeViewGetBkColor
  161.  
  162. ;===============================================================================
  163. ;
  164. ; Description:            _GUICtrlTreeViewGetCount
  165. ; Parameter(s):        $i_treeview - controlID
  166. ; Requirement:            None
  167. ; Return Value(s):    Returns the count of items.
  168. ; User CallTip:        _GUICtrlTreeViewGetCount($i_treeview) Retrieves a count of the items in a tree-view control. (required: <GuiTreeView.au3>)
  169. ; Author(s):            Gary Frost (custompcs at charter dot net)
  170. ; Note(s):            
  171. ;
  172. ;===============================================================================
  173. Func _GUICtrlTreeViewGetCount($i_treeview)
  174.     Return GUICtrlSendMsg($i_treeview, $TVM_GETCOUNT, 0, 0)
  175. EndFunc   ;==>_GUICtrlTreeViewGetCount
  176.  
  177. ;===============================================================================
  178. ;
  179. ; Description:            _GUICtrlTreeViewGetIndent
  180. ; Parameter(s):        $i_treeview - controlID
  181. ; Requirement:            None
  182. ; Return Value(s):    Returns the amount of indentation.
  183. ; User CallTip:        _GUICtrlTreeViewGetIndent($i_treeview) Retrieves the amount, in pixels, that child items are indented relative to their parent items. (required: <GuiTreeView.au3>)
  184. ; Author(s):            Gary Frost (custompcs at charter dot net)
  185. ; Note(s):            
  186. ;
  187. ;===============================================================================
  188. Func _GUICtrlTreeViewGetIndent($i_treeview)
  189.     Return GUICtrlSendMsg($i_treeview, $TVM_GETINDENT, 0, 0)
  190. EndFunc   ;==>_GUICtrlTreeViewGetIndent
  191.  
  192. ;===============================================================================
  193. ;
  194. ; Description:            _GUICtrlTreeViewGetLineColor
  195. ; Parameter(s):        $i_treeview - controlID
  196. ; Requirement:            None
  197. ; Return Value(s):    Returns Hex RGB Line Color of TreeView
  198. ; User CallTip:        _GUICtrlTreeViewGetLineColor($i_treeview) Gets the line color of a Tree-View control (required: <GuiTreeView.au3>)
  199. ; Author(s):            Gary Frost (custompcs at charter dot net)
  200. ; Note(s):            
  201. ;
  202. ;===============================================================================
  203. Func _GUICtrlTreeViewGetLineColor($i_treeview)
  204.     Local $tc = Hex(String(GUICtrlSendMsg($i_treeview, $TVM_GETLINECOLOR, 0, 0)), 6)
  205.     Return '0x' & StringMid($tc, 5, 2) & StringMid($tc, 3, 2) & StringMid($tc, 1, 2)
  206. EndFunc   ;==>_GUICtrlTreeViewGetLineColor
  207.  
  208. ;===============================================================================
  209. ;
  210. ; Description:            _GUICtrlTreeViewGetParentHandle
  211. ; Parameter(s):        $i_treeview - controlID
  212. ;                    $h_item - Optional: item ID/handle to get the state of
  213. ; Requirement:            None
  214. ; Return Value(s):    Returns the parent handle
  215. ; User CallTip:        _GUICtrlTreeViewGetParentHandle($i_treeview) Gets the parent handle of item (selected) in Tree-View control (required: <GuiTreeView.au3>)
  216. ; Author(s):            Holger
  217. ;                            Gary Frost (custompcs at charter dot net)
  218. ; Note(s):            
  219. ;
  220. ;===============================================================================
  221. Func _GUICtrlTreeViewGetParentHandle($i_treeview, $h_item = 0)
  222.     If $h_item = 0 Then ; get the handle to item selected
  223.         $h_item = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
  224.     Else
  225.         Local $h_itemTmp = GUICtrlGetHandle($h_item)
  226.         If $h_itemTmp <> 0 Then $h_item = $h_itemTmp
  227.     EndIf
  228.     
  229.     If $h_item = 0 Then Return 0
  230.     
  231.     ; get the handle of the parent item
  232.     Local $h_parent = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_PARENT, $h_item)
  233.     
  234.     Return $h_parent
  235. EndFunc   ;==>_GUICtrlTreeViewGetParentHandle
  236.  
  237. ;===============================================================================
  238. ;
  239. ; Description:            _GUICtrlTreeViewGetParentID
  240. ; Parameter(s):        $i_treeview - controlID
  241. ;                    $h_item - Optional: item ID/handle to get the state of
  242. ; Requirement:            None
  243. ; Return Value(s):    Returns the parent control ID
  244. ; User CallTip:        _GUICtrlTreeViewGetParentID($i_treeview) Gets the parent control ID of item (selected) in Tree-View control (required: <GuiTreeView.au3>)
  245. ; Author(s):        Original by Gary Frost (custompcs at charter dot net)
  246. ;                    Rewritten by Holger
  247. ; Note(s):            
  248. ;
  249. ;===============================================================================
  250. Func _GUICtrlTreeViewGetParentID($i_treeview, $h_item = 0)
  251.     If $h_item = 0 Then ; get the handle to item selected
  252.         $h_item = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
  253.     Else
  254.         Local $h_itemTmp = GUICtrlGetHandle($h_item)
  255.         If $h_itemTmp <> 0 Then $h_item = $h_itemTmp
  256.     EndIf
  257.     
  258.     If $h_item = 0 Then Return 0
  259.     
  260.     ; get the handle of the parent item
  261.     Local $h_parent = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_PARENT, $h_item)
  262.  
  263.     Local $st_TVITEM = DllStructCreate("uint;dword;uint;uint;ptr;int;int;int;int;dword")
  264.     DllStructSetData($st_TVITEM, 1, $TVIF_PARAM)
  265.     DllStructSetData($st_TVITEM, 2, $h_parent)
  266.     DllStructSetData($st_TVITEM, 10, 0)
  267.     
  268.     ; get the item properties
  269.     If GUICtrlSendMsg($i_treeview, $TVM_GETITEM, 0, DllStructGetPtr($st_TVITEM)) = 0 Then Return 0
  270.     
  271.     Return DllStructGetData($st_TVITEM, 10)
  272. EndFunc   ;==>_GUICtrlTreeViewGetParentID
  273.  
  274. ;===============================================================================
  275. ;
  276. ; Description:            _GUICtrlTreeViewGetTextColor
  277. ; Parameter(s):        $i_treeview - controlID
  278. ; Requirement:            None
  279. ; Return Value(s):    Returns Hex RGB Text Color of TreeView
  280. ; User CallTip:        _GUICtrlTreeViewGetTextColor($i_treeview) Gets the text color of a Tree-View control (required: <GuiTreeView.au3>)
  281. ; Author(s):            Gary Frost (custompcs at charter dot net)
  282. ; Note(s):            
  283. ;
  284. ;===============================================================================
  285. Func _GUICtrlTreeViewGetTextColor($i_treeview)
  286.     Local $tc = Hex(String(GUICtrlSendMsg($i_treeview, $TVM_GETTEXTCOLOR, 0, 0)), 6)
  287.     Return '0x' & StringMid($tc, 5, 2) & StringMid($tc, 3, 2) & StringMid($tc, 1, 2)
  288. EndFunc   ;==>_GUICtrlTreeViewGetTextColor
  289.  
  290. ;===============================================================================
  291. ;
  292. ; Description:        _GUICtrlTreeViewGetTree
  293. ; Parameter(s):        $i_treeview - controlID
  294. ;                            $s_sep_char - character used for path seperator
  295. ; Requirement:            None
  296. ; Return Value(s):    Returns Tree Path of Item
  297. ; User CallTip:        _GUICtrlTreeViewGetTree($h_wnd, $i_treeview, $s_sep_char) Get all items text beginning by the current selected item from the Tree-View control (required: <GuiTreeView.au3>)
  298. ; Author(s):            Holger
  299. ;                            Gary Frost (custompcs at charter dot net)
  300. ; Note(s):            
  301. ;
  302. ;===============================================================================
  303. Func _GUICtrlTreeViewGetTree($i_treeview, $s_sep_char)
  304.     Local $szPath = "", $hParent, $h_item
  305.     
  306.     $h_item = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
  307.     If $h_item > 0 Then
  308.         $szPath = _GUICtrlTreeViewGetText($i_treeview, $h_item)
  309.         
  310.         Do; Get now the parent item handle if there is one
  311.             $hParent = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_PARENT, $h_item)
  312.             If $hParent > 0 Then $szPath = _GUICtrlTreeViewGetText($i_treeview, $hParent) & $s_sep_char & $szPath
  313.             $h_item = $hParent
  314.         Until $h_item <= 0
  315.     EndIf
  316.     
  317.     Return $szPath
  318. EndFunc   ;==>_GUICtrlTreeViewGetTree
  319.  
  320. ;===============================================================================
  321. ;
  322. ; Description:            _GUICtrlTreeViewSetBkColor
  323. ; Parameter(s):        $i_treeview - controlID
  324. ;                            $v_RGBcolor - New Hex text color
  325. ; Requirement:            None
  326. ; Return Value(s):    Returns the previous Hex RGB Back Color of TreeView
  327. ; User CallTip:        _GUICtrlTreeViewSetBkColor($i_treeview, $v_RGBcolor) Sets the back color of a tree-view control (required: <GuiTreeView.au3>)
  328. ; Author(s):            Gary Frost (custompcs at charter dot net)
  329. ; Note(s):            
  330. ;
  331. ;===============================================================================
  332. Func _GUICtrlTreeViewSetBkColor($i_treeview, $v_RGBcolor)
  333.     Return _TreeViewReverseColorOder(GUICtrlSendMsg($i_treeview, $TVM_SETBKCOLOR, 0, Int(_TreeViewReverseColorOder($v_RGBcolor))))
  334. EndFunc   ;==>_GUICtrlTreeViewSetBkColor
  335.  
  336. ;===============================================================================
  337. ;
  338. ; Description:            _GUICtrlTreeViewSetIndent
  339. ; Parameter(s):        $i_treeview - controlID
  340. ;                            $i_indent - Width, in pixels, of the indentation.
  341. ; Requirement:            None
  342. ; Return Value(s):    None
  343. ; User CallTip:        _GUICtrlTreeViewSetIndent($i_treeview, $i_indent) Sets the width of indentation for a tree-view control and redraws the control to reflect the new width. (required: <GuiTreeView.au3>)
  344. ; Author(s):            Gary Frost (custompcs at charter dot net)
  345. ; Note(s):                $i_indent
  346. ;                                If this parameter is less than the system-defined minimum width,
  347. ;                                the new width is set to the system-defined minimum.
  348. ;
  349. ;===============================================================================
  350. Func _GUICtrlTreeViewSetIndent($i_treeview, $i_indent)
  351.     GUICtrlSendMsg($i_treeview, $TVM_SETINDENT, $i_indent, 0)
  352. EndFunc   ;==>_GUICtrlTreeViewSetIndent
  353.  
  354. ;===============================================================================
  355. ;
  356. ; Description:            _GUICtrlTreeViewSetLineColor
  357. ; Parameter(s):        $i_treeview - controlID
  358. ;                            $v_RGBcolor - New Hex text color
  359. ; Requirement:            None
  360. ; Return Value(s):    Returns the previous Hex RGB Line Color of TreeView
  361. ; User CallTip:        _GUICtrlTreeViewSetLineColor($i_treeview, $v_RGBcolor) Sets the line color of a tree-view control (required: <GuiTreeView.au3>)
  362. ; Author(s):            Gary Frost (custompcs at charter dot net)
  363. ; Note(s):            
  364. ;
  365. ;===============================================================================
  366. Func _GUICtrlTreeViewSetLineColor($i_treeview, $v_RGBcolor)
  367.     Return _TreeViewReverseColorOder(GUICtrlSendMsg($i_treeview, $TVM_SETLINECOLOR, 0, Int(_TreeViewReverseColorOder($v_RGBcolor))))
  368. EndFunc   ;==>_GUICtrlTreeViewSetLineColor
  369.  
  370. ;===============================================================================
  371. ;
  372. ; Description:            _GUICtrlTreeViewSetTextColor
  373. ; Parameter(s):        $i_treeview - controlID
  374. ;                            $v_RGBcolor - New Hex text color
  375. ; Requirement:            None
  376. ; Return Value(s):    Returns the previous Hex RGB Text Color of TreeView
  377. ; User CallTip:        _GUICtrlTreeViewSetTextColor($i_treeview, $v_RGBcolor) Sets the text color of a tree-view control (required: <GuiTreeView.au3>)
  378. ; Author(s):            Gary Frost (custompcs at charter dot net)
  379. ; Note(s):            
  380. ;
  381. ;===============================================================================
  382. Func _GUICtrlTreeViewSetTextColor($i_treeview, $v_RGBcolor)
  383.     Return _TreeViewReverseColorOder(GUICtrlSendMsg($i_treeview, $TVM_SETTEXTCOLOR, 0, Int(_TreeViewReverseColorOder($v_RGBcolor))))
  384. EndFunc   ;==>_GUICtrlTreeViewSetTextColor
  385.  
  386. ;===============================================================================
  387. ;
  388. ; Description:            _GUICtrlTreeViewSort
  389. ; Parameter(s):        $i_treeview - controlID
  390. ; Requirement:            None
  391. ; Return Value(s):    None
  392. ; User CallTip:        _GUICtrlTreeViewSort($i_treeview) Sorts the items of a Tree-View control (required: <GuiTreeView.au3>)
  393. ; Author(s):            Gary Frost (custompcs at charter dot net)
  394. ; Note(s):            
  395. ;
  396. ;===============================================================================
  397. Func _GUICtrlTreeViewSort($i_treeview)
  398.     Local $h_item, $i, $hChild, $i_Recursive = 1
  399.     Local $a_tree
  400.     For $i = 0 To _GUICtrlTreeViewGetCount($i_treeview)
  401.         If $i == 0 Then
  402.             $h_item = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CHILD, $TVI_ROOT)
  403.         Else
  404.             $h_item = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_NEXT, $h_item)
  405.         EndIf
  406.         If IsArray($a_tree) Then
  407.             ReDim $a_tree[UBound($a_tree) + 1]
  408.         Else
  409.             Dim $a_tree[1]
  410.         EndIf
  411.         $a_tree[UBound($a_tree) - 1] = $h_item
  412.     Next
  413.     If IsArray($a_tree) Then
  414.         For $i = 0 To UBound($a_tree) - 1
  415.             GUICtrlSendMsg($i_treeview, $TVM_SORTCHILDREN, $i_Recursive, $a_tree[$i]) ; sort the items in root
  416.             Do ; sort all the children
  417.                 $hChild = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CHILD, $h_item)
  418.                 If $hChild > 0 Then
  419.                     GUICtrlSendMsg($i_treeview, $TVM_SORTCHILDREN, $i_Recursive, $hChild)
  420.                 EndIf
  421.                 $h_item = $hChild
  422.             Until $h_item <= 0
  423.         Next
  424.     EndIf
  425. EndFunc   ;==>_GUICtrlTreeViewSort
  426.  
  427. ;===============================================================================
  428. ;
  429. ; Description:        _GUITreeViewInsertItem
  430. ; Parameter(s):        $i_treeview        - controlID
  431. ;                    $s_itemtext        - item text
  432. ;                    $h_item            - Optional: parent item ID/handle
  433. ;                    $h_item_after    - Optional: item ID to insert new item after
  434. ; Requirement:        <GuiTreeView.au3>
  435. ; Return Value(s):    Return the new item handle if successfull or 0 otherwise
  436. ; User CallTip:        _GUITreeViewInsertItem($i_treeview, $s_itemtext [, $h_item_parent = 0 [, $h_item_after = 0]])
  437. ; Author(s):        Holger Kotsch
  438. ; Note(s):            Insert an item into a treeview control
  439. ;
  440. ;===============================================================================
  441. Func _GUICtrlTreeViewInsertItem($i_treeview, $s_itemtext, $h_item_parent = 0, $h_item_after = 0)
  442.     Local $h_item_tmp
  443.     Local $st_TVI    = DllStructCreate("uint;uint;" & $s_TVITEMEX)
  444.     If @error Then Return SetError(@error, @error, 0)
  445.     
  446.     Local $st_text    = DllStructCreate("char[260]")
  447.     If @error Then Return SetError(@error, @error, 0)
  448.     
  449.     If $h_item_parent = 0 Then
  450.         $h_item_parent = $TVI_ROOT
  451.     Else
  452.         $h_item_tmp = GUICtrlGetHandle($h_item_parent)
  453.         If $h_item_tmp <> 0 Then $h_item_parent = $h_item_tmp
  454.                 EndIf
  455.     
  456.     If $h_item_after = 0 Or _
  457.         ($h_item_after <> $TVI_ROOT And _
  458.         $h_item_after <>  $TVI_FIRST And _
  459.         $h_item_after <> $TVI_LAST And _
  460.         $h_item_after <> $TVI_SORT) Then
  461.         $h_item_after = $TVI_LAST
  462.             EndIf
  463.     
  464.     DllStructSetData($st_text, 1, $s_itemtext)
  465.     
  466.     Local $u_mask = $TVIF_TEXT
  467.     
  468.     Local $h_icon = _TreeViewGetImageListIconHandle($i_treeview, 0)
  469.     If $h_icon <> 0 Then
  470.         $u_mask = BitOR($u_mask, $TVIF_IMAGE)
  471.         DllStructSetData($st_TVI, 9, 0)
  472.         DllCall("user32.dll", "int", "DestroyIcon", "hwnd", $h_icon)
  473.                 EndIf
  474.         
  475.     $h_icon = _TreeViewGetImageListIconHandle($i_treeview, 1)
  476.     If $h_icon <> 0 Then
  477.         $u_mask = BitOR($u_mask, $TVIF_SELECTEDIMAGE)
  478.         DllStructSetData($st_TVI, 10, 1)
  479.         DllCall("user32.dll", "int", "DestroyIcon", "hwnd", $h_icon)
  480.             EndIf
  481.     
  482.     DllStructSetData($st_TVI, 1, $h_item_parent)
  483.     DllStructSetData($st_TVI, 2, $h_item_after)
  484.     DllStructSetData($st_TVI, 3, $u_mask)
  485.     DllStructSetData($st_TVI, 7, DllStructGetPtr($st_text))
  486.     
  487.     Return GUICtrlSendMsg($i_treeview, $TVM_INSERTITEM, 0, DllStructGetPtr($st_TVI))
  488. EndFunc   ;==>_GUICtrlTreeViewInsertItem
  489.  
  490. ;===============================================================================
  491. ;
  492. ; Description:        _GUICtrlTreeViewSetIcon
  493. ; Parameter(s):        $i_treeview        - controlID
  494. ;                    $h_item            - item ID/handle to set the icon
  495. ;                    $s_iconfile        - the file to extract the icon of
  496. ;                    $i_iconID        - the iconID to extract of the file
  497. ;                    $u_imagemode    - Optional: 2=normal image / 4=seletected image to set (default 6)
  498. ; Requirement:        None
  499. ; Return Value(s):    Returns TRUE if successfull or FALSE otherwise
  500. ; User CallTip:        _GUITreeViewSetIcon($i_treeview, $h_item = 0, $s_iconfile = ""[, $i_iconID = 0[, $u_imagemode = 6]])
  501. ; Author(s):        Holger Kotsch
  502. ; Note(s):            Change/set an item icon
  503. ;
  504. ;===============================================================================
  505. Func _GUICtrlTreeViewSetIcon($i_treeview, $h_item = 0, $s_iconfile = "", $i_iconID = 0, $u_imagemode = 6)
  506.     $h_item = _TreeViewGetItemHandle($i_treeview, $h_item)
  507.     If $h_item = 0 Or $s_iconfile = "" Then Return SetError(1, 1, False)
  508.     
  509.     Local $st_TVITEM    = DllStructCreate($s_TVITEMEX)
  510.     If @error Then Return SetError(1, 1, False)
  511.     
  512.     Local $st_icon = DllStructCreate("int")
  513.     Local $i_count = DllCall("shell32.dll", "int", "ExtractIconEx", _
  514.                                                 "str", $s_iconfile, _
  515.                                                 "int", $i_iconID, _
  516.                                                 "ptr", 0, _
  517.                                                 "ptr", DllStructGetPtr($st_icon), _
  518.                                                 "int", 1)
  519.     If $i_count[0] = 0 Then Return 0
  520.         
  521.     Local $h_imagelist = GUICtrlSendMsg($i_treeview, $TVM_GETIMAGELIST, 0, 0)
  522.     If $h_imagelist = 0 Then
  523.         $h_imagelist = DllCall("comctl32.dll", "hwnd", "ImageList_Create", _
  524.                                                     "int", 16, _
  525.                                                     "int", 16, _
  526.                                                     "int", 0x0021, _
  527.                                                     "int", 0, _
  528.                                                     "int", 1)
  529.         $h_imagelist = $h_imagelist[0]
  530.         If $h_imagelist = 0 Then Return SetError(1, 1, False)
  531.          
  532.         GUICtrlSendMsg($i_treeview, $TVM_SETIMAGELIST, 0, $h_imagelist)
  533.                             EndIf
  534.     
  535.     Local $h_icon = DllStructGetData($st_icon, 1)
  536.     Local $i_icon = DllCall("comctl32.dll", "int", "ImageList_AddIcon", _
  537.                                                 "hwnd", $h_imagelist, _
  538.                                                 "hwnd", $h_icon)
  539.     $i_icon = $i_icon[0]
  540.     
  541.     DllCall("user32.dll", "int", "DestroyIcon", "hwnd", $h_icon)
  542.         
  543.     Local $u_mask = BitOR($TVIF_IMAGE, $TVIF_SELECTEDIMAGE)
  544.     
  545.     If BitAND($u_imagemode, 2) Then
  546.         DllStructSetData($st_TVITEM, 7, $i_icon)
  547.         If Not BitAND($u_imagemode, 4) Then $u_mask = $TVIF_IMAGE
  548.                         EndIf
  549.     
  550.     If BitAND($u_imagemode, 4) Then
  551.         DllStructSetData($st_TVITEM, 8, $i_icon)
  552.         If Not BitAND($u_imagemode, 2) Then
  553.             $u_mask = $TVIF_SELECTEDIMAGE
  554.                     Else
  555.             $u_mask = BitOR($TVIF_IMAGE, $TVIF_SELECTEDIMAGE)
  556.                         EndIf
  557.                     EndIf
  558.  
  559.     DllStructSetData($st_TVITEM, 1, $u_mask)
  560.     DllStructSetData($st_TVITEM, 2, $h_item)
  561.  
  562.     Return GUICtrlSendMsg($i_treeview, $TVM_SETITEM, 0, DllStructGetPtr($st_TVITEM))
  563. EndFunc   ;==>_GUICtrlTreeViewSetIcon
  564.  
  565. ;===============================================================================
  566. ;
  567. ; Description:        _GUICtrlTreeViewGetState
  568. ; Parameter(s):        $i_treeview        - controlID
  569. ;                    $h_item            - item ID/handle to get the state of
  570. ; Requirement:        None
  571. ; Return Value(s):    Returns the item state if successfull or 0 otherwise
  572. ; User CallTip:        _GUITreeViewSetState($i_treeview, $h_item = 0, $s_itemtext)
  573. ; Author(s):        Holger Kotsch
  574. ; Note(s):            Change/set the state of an item
  575. ;
  576. ;===============================================================================
  577. Func _GUICtrlTreeViewGetState($i_treeview, $h_item = 0)
  578.     $h_item = _TreeViewGetItemHandle($i_treeview, $h_item)
  579.     If $h_item = 0 Then Return SetError(1, 1, 0)
  580.     
  581.     Local $st_TVITEM    = DllStructCreate($s_TVITEMEX)
  582.     If @error Then Return SetError(1, 1, 0)
  583.     
  584.     DllStructSetData($st_TVITEM, 1, $TVIF_STATE)
  585.     DllStructSetData($st_TVITEM, 2, $h_item)
  586.         
  587.     If GUICtrlSendMsg($i_treeview, $TVM_GETITEM, 0, DllStructGetPtr($st_TVITEM)) = 0 Then Return 0
  588.     
  589.     Return DllStructGetData($st_TVITEM, 3)
  590. EndFunc   ;==>_GUICtrlTreeViewGetState
  591.  
  592.  
  593. ;===============================================================================
  594. ;
  595. ; Description:        _GUICtrlTreeViewSetState
  596. ; Parameter(s):        $i_treeview        - controlID
  597. ;                    $h_item            - item ID/handle to set the icon
  598. ;                    $i_state        - the new item state
  599. ; Requirement:        None
  600. ; Return Value(s):    Returns TRUE if successfull or FALSE otherwise
  601. ; User CallTip:        _GUITreeViewSetState($i_treeview, $h_item = 0, $s_itemtext)
  602. ; Author(s):        Holger Kotsch
  603. ; Note(s):            Change/set the state of an item
  604. ;
  605. ;===============================================================================
  606. Func _GUICtrlTreeViewSetState($i_treeview, $h_item = 0, $i_state = 0)
  607.     $h_item = _TreeViewGetItemHandle($i_treeview, $h_item)
  608.     If $h_item = 0 Or $i_state = 0 Then Return 0
  609.     
  610.     Local $st_TVITEM    = DllStructCreate($s_TVITEMEX)
  611.     If @error Then Return SetError(1, 1, 0)
  612.     
  613.     DllStructSetData($st_TVITEM, 1, $TVIF_STATE)
  614.     DllStructSetData($st_TVITEM, 2, $h_item)
  615.     DllStructSetData($st_TVITEM, 3, $i_state)
  616.     DllStructSetData($st_TVITEM, 4, $i_state)
  617.     
  618.     Return GUICtrlSendMsg($i_treeview, $TVM_SETITEM, 0, DllStructGetPtr($st_TVITEM))
  619. EndFunc   ;==>_GUICtrlTreeViewSetState
  620.  
  621.  
  622. ;===============================================================================
  623. ;
  624. ; Description:        _GUITreeViewSetText
  625. ; Parameter(s):        $i_treeview        - controlID
  626. ;                    $h_item            - item ID to set the icon
  627. ;                    $s_itemtext        - the new item text
  628. ; Requirement:        None
  629. ; Return Value(s):    Returns TRUE if successfull or FALSE otherwise
  630. ; User CallTip:        _GUITreeViewSetText($i_treeview, $h_item = 0, $s_itemtext)
  631. ; Author(s):        Holger Kotsch
  632. ; Note(s):            Change/set the text of an item
  633. ;
  634. ;===============================================================================
  635. Func _GUICtrlTreeViewSetText($i_treeview, $h_item = 0, $s_text = "")
  636.     $h_item = _TreeViewGetItemHandle($i_treeview, $h_item)
  637.     If $h_item = 0 Or $s_text = "" Then Return SetError(1, 1, 0)
  638.     
  639.     Local $st_TVITEM    = DllStructCreate($s_TVITEMEX)
  640.     If @error Then Return SetError(@error, @error, 0)
  641.     
  642.     Local $st_text        = DllStructCreate("char[260]")
  643.     If @error Then Return SetError(@error, @error, 0)
  644.         
  645.     DllStructSetData($st_text, 1, $s_text)
  646.     
  647.     DllStructSetData($st_TVITEM, 1, $TVIF_TEXT)
  648.     DllStructSetData($st_TVITEM, 2, $h_item)
  649.     DllStructSetData($st_TVITEM, 5, DllStructGetPtr($st_text))
  650.         
  651.     Return GUICtrlSendMsg($i_treeview, $TVM_SETITEM, 0, DllStructGetPtr($st_TVITEM))
  652. EndFunc   ;==>_GUICtrlTreeViewSetText
  653.  
  654.  
  655. ; _GUICtrlTreeViewSelectItem is an depreciated  function
  656. ;
  657. ; Use GUICtrlSetState($h_itemID, $GUI_FOCUS)
  658. ;===============================================================================
  659. ;
  660. ; Description:        _GUICtrlTreeViewSelectItem
  661. ; Parameter(s):        $i_itemID    - item ID
  662. ; Requirement:        None
  663. ; Return Value(s):    Returns TRUE if successfull or FALSE otherwise.
  664. ; User CallTip:        _GUICtrlTreeViewSelectItem($h_itemID) Selects the specified tree-view item, scrolls the item into view)
  665. ; Author(s):        Gary Frost (custompcs at charter dot net)
  666. ; Note(s):            :
  667. ;
  668. ;===============================================================================
  669. Func _GUICtrlTreeViewSelectItem($i_itemID)
  670.     GUICtrlSetState($i_itemID, $GUI_FOCUS)
  671. EndFunc   ;==>_GUICtrlTreeViewSelectItem
  672.  
  673.  
  674. ;===============================================================================
  675. ;
  676. ; Description:        _GUICtrlTreeViewGetText
  677. ; Parameter(s):        $i_treeview    - controlID
  678. ; Parameter(s):        $h_item        - item ID or item handle
  679. ; Requirement:            None
  680. ; Return Value(s):    Returns text of item
  681. ;                            Returns empty string if it fails
  682. ; User CallTip:        _GUICtrlTreeViewGetText($i_treeview, $h_item) Retrieve the item text by sending a right item handle (required: <GuiTreeView.au3>)
  683. ; Author(s):            Holger
  684. ;                            Gary Frost (custompcs at charter dot net)
  685. ; Note(s):            
  686. ;
  687. ;===============================================================================
  688. Func _GUICtrlTreeViewGetText($i_treeview, $h_item = 0)
  689.     Local $s_text = ""
  690.     
  691.     $h_item = _TreeViewGetItemHandle($i_treeview, $h_item)
  692.     If $h_item = 0 Then Return SetError(1, 1, "")
  693.     
  694.     Local $st_text = DllStructCreate("char[260]"); create a text 'area' for receiving the text
  695.     If @error Then Return SetError(@error, @error, "")
  696.     
  697.     Local $st_TVITEM = DllStructCreate($s_TVITEMEX)
  698.     If @error Then Return SetError(@error, @error, "")
  699.     
  700.     DllStructSetData($st_TVITEM, 1, $TVIF_TEXT)
  701.     DllStructSetData($st_TVITEM, 2, $h_item)
  702.     DllStructSetData($st_TVITEM, 5, DllStructGetPtr($st_text))
  703.     DllStructSetData($st_TVITEM, 6, DllStructGetSize($st_text))
  704.     
  705.     If GUICtrlSendMsg($i_treeview, $TVM_GETITEM, 0, DllStructGetPtr($st_TVITEM)) Then $s_text = DllStructGetData($st_text, 1)
  706.     
  707.     Return $s_text
  708. EndFunc   ;==>_GUICtrlTreeViewGetText
  709.  
  710. ;===============================================================================
  711. ; Description:        Some other helper functions
  712. ;===============================================================================
  713.     
  714.  
  715. Func _TreeViewDeleteItem($i_treeview, $hChild, $szPath, $szFind)
  716.     Local $t_hchild, $t_child
  717.     $t_hchild = $hChild
  718.     If $szPath = $szFind Then
  719.         Return GUICtrlSendMsg($i_treeview, $TVM_SELECTITEM, $TVGN_CARET, $hChild)
  720.     Else
  721.         Do; Get now the child item handle if there is one
  722.             $t_hchild = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CHILD, $t_hchild)
  723.             If $t_hchild > 0 Then
  724.                 $szPath = _GUICtrlTreeViewGetText($i_treeview, $t_hchild)
  725.                 If $szPath = $szFind Then
  726.                     Return GUICtrlSendMsg($i_treeview, $TVM_DELETEITEM, 0, $t_hchild)
  727.                 Else
  728.                     $t_child = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_NEXT, $t_hchild)
  729.                     If $t_child > 0 Then
  730.                         $szPath = _GUICtrlTreeViewGetText($i_treeview, $t_hchild)
  731.                         If $szPath = $szFind Then
  732.                             Return GUICtrlSendMsg($i_treeview, $TVM_DELETEITEM, 0, $t_hchild)
  733.                         Else
  734.                             _TreeViewDeleteItem($i_treeview, $t_hchild, _GUICtrlTreeViewGetText($i_treeview, $t_hchild), $szFind)
  735.                         EndIf
  736.                     EndIf
  737.                 EndIf
  738.             EndIf
  739.         Until $t_hchild <= 0
  740.         $t_hchild = $hChild
  741.         Do; Get now the child item handle if there is one
  742.             $t_hchild = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_NEXT, $t_hchild)
  743.             If $t_hchild > 0 Then
  744.                 $szPath = _GUICtrlTreeViewGetText($i_treeview, $t_hchild)
  745.                 If $szPath = $szFind Then
  746.                     Return GUICtrlSendMsg($i_treeview, $TVM_DELETEITEM, 0, $t_hchild)
  747.                 Else
  748.                     $t_child = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CHILD, $t_hchild)
  749.                     If $t_child > 0 Then
  750.                         _TreeViewDeleteItem($i_treeview, $t_child, _GUICtrlTreeViewGetText($i_treeview, $t_child), $szFind)
  751.                         $t_hchild = 0
  752.                     EndIf
  753.                 EndIf
  754.             EndIf
  755.         Until $t_hchild <= 0
  756.     EndIf
  757. EndFunc   ;==>_TreeViewDeleteItem
  758.  
  759. Func _TreeViewSelectItem($i_treeview, $hChild, $szPath, $szFind)
  760.     Local $t_hchild, $t_child
  761.     $t_hchild = $hChild
  762.     If $szPath = $szFind Then
  763.         Return GUICtrlSendMsg($i_treeview, $TVM_SELECTITEM, $TVGN_CARET, $hChild)
  764.     Else
  765.         Do; Get now the child item handle if there is one
  766.             $t_hchild = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CHILD, $t_hchild)
  767.             If $t_hchild > 0 Then
  768.                 $szPath = _GUICtrlTreeViewGetText($i_treeview, $t_hchild)
  769.                 If $szPath = $szFind Then
  770.                     Return GUICtrlSendMsg($i_treeview, $TVM_SELECTITEM, $TVGN_CARET, $t_hchild)
  771.                 Else
  772.                     $t_child = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_NEXT, $t_hchild)
  773.                     If $t_child > 0 Then
  774.                         $szPath = _GUICtrlTreeViewGetText($i_treeview, $t_hchild)
  775.                         If $szPath = $szFind Then
  776.                             Return GUICtrlSendMsg($i_treeview, $TVM_SELECTITEM, $TVGN_CARET, $t_hchild)
  777.                         Else
  778.                             _TreeViewSelectItem($i_treeview, $t_hchild, _GUICtrlTreeViewGetText($i_treeview, $t_hchild), $szFind)
  779.                         EndIf
  780.                     EndIf
  781.                 EndIf
  782.             EndIf
  783.         Until $t_hchild <= 0
  784.         $t_hchild = $hChild
  785.         Do; Get now the child item handle if there is one
  786.             $t_hchild = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_NEXT, $t_hchild)
  787.             If $t_hchild > 0 Then
  788.                 $szPath = _GUICtrlTreeViewGetText($i_treeview, $t_hchild)
  789.                 If $szPath = $szFind Then
  790.                     Return GUICtrlSendMsg($i_treeview, $TVM_SELECTITEM, $TVGN_CARET, $t_hchild)
  791.                 Else
  792.                     $t_child = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_CHILD, $t_hchild)
  793.                     If $t_child > 0 Then
  794.                         _TreeViewSelectItem($i_treeview, $t_child, _GUICtrlTreeViewGetText($i_treeview, $t_child), $szFind)
  795.                         $t_hchild = 0
  796.                     EndIf
  797.                 EndIf
  798.             EndIf
  799.         Until $t_hchild <= 0
  800.     EndIf
  801. EndFunc   ;==>_TreeViewSelectItem
  802.  
  803. ;===============================================================================
  804. ;
  805. ; Description:            _TreeViewReverseColorOder
  806. ; Parameter(s):        $v_color - Hex Color
  807. ; Requirement:            None
  808. ; Return Value(s):    Return Hex RGB or BGR Color
  809. ; User CallTip:        _TreeViewReverseColorOder($v_color) Convert Hex RGB or BGR Color to Hex RGB or BGR Color
  810. ; Author(s):            Gary Frost (custompcs at charter dot net)
  811. ; Note(s):                Used for getting/setting view colors
  812. ;
  813. ;===============================================================================
  814. Func _TreeViewReverseColorOder($v_color)
  815.     Local $tc = Hex(String($v_color), 6)
  816.     Return '0x' & StringMid($tc, 5, 2) & StringMid($tc, 3, 2) & StringMid($tc, 1, 2)
  817. EndFunc   ;==>_TreeViewReverseColorOder
  818.  
  819. Func _TreeViewGetItemHandle($i_treeview, $h_item)
  820.     If $h_item = 0 Then
  821.         $h_item = GUICtrlSendMsg($i_treeview, $TVM_GETNEXTITEM, $TVGN_ROOT, 0)
  822.     Else
  823.         Local $h_item_tmp = GUICtrlGetHandle($h_item)
  824.         If $h_item_tmp <> 0 Then $h_item = $h_item_tmp
  825.     EndIf
  826.     
  827.     Return $h_item
  828. EndFunc   ;==>_TreeViewGetItemHandle
  829.  
  830. Func _TreeViewGetImageListIconHandle($i_treeview, $u_index)
  831.     Local $h_imagelist = GUICtrlSendMsg($i_treeview, $TVM_GETIMAGELIST, 0, 0)
  832.     Local $h_icon = DllCall("comctl32.dll", "hwnd", "ImageList_GetIcon", _
  833.                                                 "hwnd", $h_imagelist, _
  834.                                                 "int", $u_index, _
  835.                                                 "int", 0)
  836.     Return $h_icon[0]
  837. EndFunc   ;==>_TreeViewGetImageListIconHandle
  838.